
// process.stdin.resume();
// process.stdin.setEncoding('utf-8');
// let input = '';
// process.stdin.on('data', (data) => {
//   input += data;
// });
// process.stdin.on('end', () => {
//   let inputArray = input.split('\n');
//   /**
//    * 待实现函数，在此函数中填入答题代码
//    * doFunc()
//    */
//   let n = inputArray.shift() // 获取这个n个订单
//   console.log(n)
//   console.log(inputArray)

//   process.exit();
// });
function doFunc (n, array) { // 传入两个参数 一个是订单的数量,一个是这个数组
  // 01背包 生成背包是按照什么生成的 按照这个背包的最大容量
  for (let i = 0; i < array.length; i++) {
    array[i] = array[i].split(' ').map((item) => parseInt(item))
  }
  array.sort((a, b) => a[1] - b[1]) // 按照这个的升序进行排列
  // console.log(array);
  let size = array[array.length - 1][1] // 最大的背包容量
  let dp = new Array(size + 1).fill(0) // 初始化背包都是0中 dp[i][0] 表示这个的最晚时间 dp[1] 表示这个背包的最大容量
  // dp[0] = 1
  for (let i = 0; i < n; i++) { // 外层遍历物品
    // 内层遍历背包 要让这个背包容量大于这个的最晚时间 并且上个的最晚时间加上这个的持续时间不能让大于这个背包的容量
    for (let j = size; j >= array[i][0]; j--) {
      dp[j] = Math.max(dp[j], dp[j - array[i][0]] + 1) // 这个的最大的个数 是原来的最大的个数 和j-持续时间的个数+1
    }
  }
  return dp[size]
}
let n = 4
let array = ['1 2', '2 13', '10 12', '20 32']
// let n = 2
// let array = ['2 3', '1 2']
// let n = 2
// let array = ['4 2', '4 3']
console.log(doFunc(n, array));